

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>configurationObjectPattern</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script>

var MYAPP = MYAPP || {};

$(document).ready(function () {
    
    MYAPP.namespace('MYAPP.utilities.Array');
    MYAPP.utilities.Array = (function () {
        
        // 의존 관계 선언
        var uobj = MYAPP.utilities.object,
            ulang = MYAPP.utilities.lang,
            
            // 비공개 프로퍼티와 메서드들을 선언한 후...
            Constr;
        
        // 공개 API - 생성자 함수
        Constr = function (o) {
            this.elements = this.toArray(o);
        }
        
        // 공개 API - 프로토타입
        Constr.prototype = {
            constructor: MYAPP.utilities.Array,
            version: "2.0",
            toArray: function (obj) {
                for (var i = 0, a = [], len = obj.length; i  < len; i += 1) {
                    a[i] = obj[i];
                }
                return a;
            }
        };
        
        // 생성자 함수를 반환한다.
        // 이 함수가 새로운 네임스페이스에 할당될 것이다.
        return Constr;    
    }());
    
    var str = "white.black.orange.blue";
    
    var obj = str.split(".");
    // console.log(obj);
    
    var arr = new MYAPP.utilities.Array(obj);
    
    console.log(arr);
    
});

MYAPP.namespace = function (ns_string) {
	var parts = ns_string.split('.'),
	    parent = MYAPP,
	    i;
	
	// 처음에 중복되는 전역 객체명은 제거한다
	if (parts[0] === "MYAPP") {
		parts = parts.slice(1);
	}
	
	for (i = 0; i < parts.length; i += 1){
	   // 프로퍼티가 존재하지 않으면 생성한다
	   if (typeof parent[parts[i]] === "undefined") {
	       parent[parts[i]] = {};
	   }
	   parent = parent[parts[i]];
	}
	return parent;
};

</script>

</head>
    <body>
        <h3>생성자를 생성성하는 모</h3>
    </body>
</html>